import javax.swing.*;
import java.io.*; 
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;


public class MainPc {
	public static long msg_id;
	public static String type = "PC";
	public static JButton caminhoVlc;
	public static JButton bibliotecaFilmes;
	public static JButton bibliotecaMusicas;
	public static JLabel vlclabel;
	public static String vlcpath = new String();
	public static Telnet telnet = null;
	static JFrame frame = new JFrame("Central");
	public static void main(String[] args) throws IOException{
		CaminhoVlc caminhovlc = new CaminhoVlc();
		vlclabel = new JLabel();
		 try {
		        BufferedReader in = new BufferedReader(new FileReader("VLC.txt"));
		        vlcpath = in.readLine();
		        in.close();
		        MainPc.vlclabel.setText("O caminho para seu vlc eh: " + vlcpath);
		    } catch (IOException e) {
		    	vlcpath = "erro no caminho do vlc";
		    	caminhovlc.acheVlc();
		    }
		telnet = new Telnet(vlcpath);
		final Server server = new Server();
		Biblioteca biblioteca = new Biblioteca();
		//VLCControler vlc = new VLCControler();
		new Thread(server).start();
		frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		//create custom close operation
		frame.addWindowListener(new WindowAdapter()
		{
		public void windowClosing(WindowEvent e)
		{
			exit();
		}
		});
		frame.setBounds(30, 30, 300, 300);
		Container content = frame.getContentPane(); // Get the content pane
		content.setLayout(new GridBagLayout());// Set the container layout mgr
	    GridBagConstraints c = new GridBagConstraints();    	
		caminhoVlc = new JButton("Caminho do VLC");
		bibliotecaFilmes = new JButton("biblioteca de Filmes");
		bibliotecaMusicas = new JButton("biblioteca de Musicas");
		caminhoVlc.addActionListener(caminhovlc);
		bibliotecaFilmes.addActionListener(biblioteca);
		bibliotecaMusicas.addActionListener(biblioteca);
		c.gridx = 1;								//coloca os botoes na GridBagLayout
	    c.gridy = 1;
		c.anchor = GridBagConstraints.LAST_LINE_START;
		content.add(caminhoVlc,c);
		c.gridx = 1;
	    c.gridy = 2;
		content.add(vlclabel,c);
		c.gridx = 1;
	    c.gridy = 3;
		content.add(bibliotecaFilmes,c);
		c.gridx = 2;
	    c.gridy = 3;
		content.add(bibliotecaMusicas,c);
		frame.pack();
		frame.setVisible(true);
		EnviarLista enviar = new EnviarLista();
		long format_time;
		String time = new String();
		String length = new String();
		String filme = new String();
		String canal = new String();
		String lista = new String();
		Leitor leitor = new Leitor();
		String index;
		//Server.message="?filme:61.avi";
		//telnet.comando("show");
		while(true){
		if(Server.message!=null){
			System.out.println(Server.message);
			if (Server.message.contains("?filmes:")){
				enviar.Lista(Server.message.split(":")[1],"Filmes.txt");
			}
			if (Server.message.contains("?musicas:")){
				enviar.Lista(Server.message.split(":")[1],"Musicas.txt");
			}
			if (Server.message.equals("?filmes")){  //Android esta pedindo pela lista de filmes
				enviar.Lista("","Filmes.txt");
			}
			if (Server.message.equals("?musicas")){  //Android esta pedindo pela lista de filmes
				enviar.Lista("","Musicas.txt");
			}
			if (Server.message.contains("?filme:")){
				filme = Server.message.split(":")[1];
				try{
					canal = Server.message.split(":")[2];
				}
				catch (Exception e) {canal = "";}
				try{
					lista = Server.message.split(":")[3];
				}
				catch (Exception e) {lista = "";}
				if (filme.equals("Tudo")){
					telnet.conectarFilme(canal);
					for(int i=0;leitor.ler(lista,"Filmes.txt")[i]!=null;i++){ 
						telnet.abrir(leitor.ler(lista,"Filmes.txt")[i],canal);
					}
					//telnet.comando("show");
				}
				else{
					telnet.conectarFilme(canal);
					telnet.abrir(AbrirLista(filme,lista,"Filmes.txt"),canal);
				}
			}
			if (Server.message.contains("?musica:")){
				filme = Server.message.split(":")[1];
				try{
					canal = Server.message.split(":")[2];
				}
				catch (Exception e) {canal = "";}
				try{
					lista = Server.message.split(":")[3];
				}
				catch (Exception e) {lista = "";}
				if (filme.equals("Tudo")){
					telnet.conectarMusica(canal);
					for(int i=0;leitor.ler(lista,"Musicas.txt")[i]!=null;i++){ 
						telnet.abrir(leitor.ler(lista,"Musicas.txt")[i],canal);
					}
				}
				else{
					telnet.conectarMusica(canal);
					telnet.abrir(AbrirLista(filme,lista,"Musicas.txt"),canal);
				}
			}
			//Android pedindo seek
			if (Server.message.contains("?seek:")){
				try{
					time = Server.message.split(":")[1];
				}
				catch (Exception e) {time = "0";}
				try{
					canal = Server.message.split(":")[2];
				}
				catch (Exception e) {canal = "null";}
				telnet.comando("control " + canal + " seek " + time + "ms");
			}
			//Android pedindo duracao
			if (Server.message.contains("?get_max:")){
				try{
					canal = Server.message.split(":")[1];
				}
				catch (Exception e) { canal = "null"; }
				length = telnet.getLength(canal);
				if ( length.equals("timeout"))
					Client.enviar("?get_max:" + length + ":?fim", MainPc.type);
				else {
					System.out.println(length);
					try {
						format_time = Long.parseLong(length)/1000;
					} catch (NumberFormatException e) {
						format_time = 0;
						System.out.println(e.getMessage());
					}
					length = String.valueOf(format_time);
					Client.enviar("?get_max:" + length + ":?fim", MainPc.type);
				}
			}
			//Android pedindo tempo
			if (Server.message.contains("?time:")){
				time = telnet.getTime(canal);
				System.out.println(time);
				try {
					format_time = Long.parseLong(time)/1000;
				} catch (NumberFormatException e) {
					format_time = 0;
					System.out.println(e.getMessage());
				}
				time = String.valueOf(format_time);
				Client.enviar("?time:" + time + ":?fim", MainPc.type);
			}
			//MainPc.label.setText(mensagem);
			if (Server.message.contains("?play:")){
				try{
					canal = Server.message.split(":")[1];
				}
				catch (Exception e) {canal = "null";}
				telnet.comando("control " + canal + " pause");
			}
			if (Server.message.contains("?playInt:")){
				try{
					canal = Server.message.split(":")[1];
				}
				catch (Exception e) {canal = "null";}
				index = Server.message.split(":")[2];
				telnet.comando("control " + canal + " play [" + index+"]");
			}
			if (Server.message.contains("?prox:")){
				try{
					canal = Server.message.split(":")[1];
				}
				catch (Exception e) {canal = "null";}
				telnet.playlist(canal,1);
			}
			if (Server.message.contains("?ante:")){
				try{
					canal = Server.message.split(":")[1];
				}
				catch (Exception e) {canal = "null";}
				telnet.playlist(canal,-1);
			}
				
			if (Server.message.contains("?stop:")){
				try{
					canal = Server.message.split(":")[1];
				}
				catch (Exception e) {canal = "null";}
				telnet.comando("control " + canal + " stop");
				telnet.comando("del "+canal);
			}
			if (Server.message.equals("?show")){
				telnet.show();
			}
			Server.message=null;
		}
			try{
			   Thread.sleep(50);}
			catch (Exception e) {e.printStackTrace();}
			}
		
	}
	public static String AbrirLista(String filme,String lista,String arq){
		System.out.println(arq);
		Leitor leitor = new Leitor();
		String[] a= new String[50];
		String b= new String();
		int i,j;
		for(i=0;leitor.ler(lista,arq)[i]!=null;i++){ 
			System.out.println("dfdsfdsfs");
			a = leitor.ler(lista,arq)[i].split("\\\\");						
			b = a[0];
			System.out.println(b);
			for(j=1;!b.equals(leitor.ler(lista,arq)[i]);j++){				//separa somente o nome do arquivo
				b=(b + "\\" + a[j]);
			}
			if (a[j-1].equals(filme)){
				return b;
				/*
				System.out.println(b);
				VLCControler.comando("add " + b);
				VLCControler.comando("f");
				System.out.println(b);
				*/
				
			}
		}
		return "erro";
	}
	public static void exit(){
		telnet.disconnect();
		System.exit(0);
	}

}
